home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
Ink.h
< prev
next >
Wrap
C/C++ Source or Header
|
1992-08-17
|
6KB
|
239 lines
#ifndef Ink_First
#ifdef __GNUG__
//pragma once
#pragma interface
#endif
#define Ink_First
#include "Types.h"
#include "Object.h"
class RGB;
class Ink;
class HSVColor;
class RGBColor;
class InkManager;
class Port;
class OrdCollection;
typedef Ink *GrPattern; // obsolete
typedef u_short word; // obsolete
const word MaxWord= 255;
extern InkManager *gInkManager;
extern Ink *gInkXor,
*gInkNone,
*gInkWhite,
*gInkBlack,
*gHighlightColor;
// obsolete !!!
extern Ink *ePatXor, *ePatNone, *ePatWhite, *ePatBlack;
extern Ink *ePatGrey12, *ePatGrey25, *ePatGrey40, *ePatGrey50, *ePatGrey60;
extern Ink *ePatGrey75;
extern Ink *ePat00, *ePat01, *ePat02, *ePat03, *ePat04, *ePat05;
extern Ink *ePat06, *ePat07, *ePat08, *ePat09, *ePat10, *ePat11;
extern Ink *ePat12, *ePat13, *ePat14, *ePat15;
enum InkFlags {
eInkChanged = BIT(eObjLast+1),
eInkLast = eObjLast + 1
};
//---- Ink ---------------------------------------------------------------------
class Ink : public Object {
long int id;
public:
MetaDef(Ink);
Ink();
Ink(long i);
long GetId()
{ return id; }
void SetId(long id);
virtual void SetInk(Port *p);
bool IsEqual(Object*);
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
Object *ReadAndMap(IStream&);
};
//---- RGB ---------------------------------------------------------------------
class RGB {
public:
short red, green, blue;
public:
RGB()
{ }
RGB(const RGB &c);
RGB(const HSVColor &c);
RGB(float graylevel);
RGB(short rgb)
{ red= green= blue= rgb; }
RGB(short r, short g, short b)
{ red= r; green= g; blue= b; }
void SetRGB(short r, short g, short b);
bool IsGrey()
{ return red == green && green == blue; }
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
friend OStream& operator<< (OStream &os, RGB &rgb)
{ return rgb.PrintOn(os); }
friend IStream& operator>> (IStream &is, RGB &rgb)
{ return rgb.ReadFrom(is); }
short AsGreyLevel();
friend RGB operator-(RGB &op1, RGB &op2)
{ return RGB(op1.red-op2.red, op1.green-op2.green, op1.blue-op2.blue); }
friend RGB operator+(RGB &op1, RGB &op2)
{ return RGB(op1.red+op2.red, op1.green+op2.green, op1.blue+op2.blue); }
friend RGB operator*(RGB &op1, int v)
{ return RGB(op1.red*v, op1.green*v, op1.blue*v); }
friend RGB operator/(RGB &op1, int v)
{ return RGB(op1.red/v, op1.green/v, op1.blue/v); }
RGB operator+=(RGB &op1)
{ red+= op1.red; green+= op1.green; blue+= op1.blue; return *this; }
void Clip() {
if (red < 0) red= 0; else if (red > 255) red= 255;
if (green < 0) green= 0; else if (green > 255) green= 255;
if (blue < 0) blue= 0; else if (blue > 255) blue= 255;
}
};
//---- HSVColor -------------------------------------------------------------------
class HSVColor {
public:
short hue, saturation, value;
public:
HSVColor()
{ }
HSVColor(const HSVColor &c);
HSVColor(const RGB &c);
HSVColor(short graylevel)
{ hue= saturation= 0; value= graylevel; }
HSVColor(RGBColor&);
HSVColor(short h, short s, short v)
{ hue= h; saturation= s; value= v; }
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
friend OStream& operator<< (OStream &os, HSVColor &hsv)
{ return hsv.PrintOn(os); }
friend IStream& operator>> (IStream &is, HSVColor &hsv)
{ return hsv.ReadFrom(is); }
};
//---- ColorMap ----------------------------------------------------------------
class ColorMap {
public:
int size;
RGB *map;
public:
ColorMap(int sz);
ColorMap(ColorMap*);
~ColorMap();
void Expand(int sz);
int Size()
{ return size; }
void SetEntry(int ix, RGB &rgb);
RGB GetEntry(int ix);
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
friend OStream& operator<< (OStream &os, ColorMap &cmap)
{ return cmap.PrintOn(os); }
friend IStream& operator>> (IStream &is, ColorMap &cmap)
{ return cmap.ReadFrom(is); }
bool IsGrey();
};
//---- RGBColor ----------------------------------------------------------------
class RGBColor: public Ink {
friend class HSVColor;
short prec;
RGB rgb;
public:
class Port *port;
public:
MetaDef(RGBColor);
RGBColor();
RGBColor(RGBColor*);
RGBColor(const RGB &c, short prec= 0);
RGBColor(const HSVColor &h, short prec= 0);
RGBColor(const RGBColor &c);
RGBColor(short r, short g, short b, short prec= 0);
RGBColor(short graylevel, short prec= 0);
RGBColor(float graylevel, short prec= 0);
short GetRed()
{ return rgb.red; }
short GetGreen()
{ return rgb.green; }
short GetBlue()
{ return rgb.blue; }
short GetPrec()
{ return prec; }
RGB *GetRGB()
{ return &rgb; }
bool SetHSV(short hue, short sat, short value, short p= 0);
bool SetRGB(RGB *rgb, short p= 0);
bool SetRGB(short r, short g, short b, short p= 0);
bool SetRed(short r)
{ return SetRGB(r, rgb.green, rgb.blue, prec); }
bool SetGreen(short g)
{ return SetRGB(rgb.red, g, rgb.blue, prec); }
bool SetBlue(short b)
{ return SetRGB(rgb.red, rgb.green, b, prec); }
bool SetPrec(short p)
{ return SetRGB(rgb.red, rgb.green, rgb.blue, p); }
int AsGreyLevel()
{ return rgb.AsGreyLevel(); }
void SetInk(Port *p);
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
Object *ReadAndMap(IStream&);
};
//---- RGBColorCell ------------------------------------------------------------
class RGBColorCell: public RGBColor {
public:
MetaDef(RGBColorCell);
RGBColorCell(int id);
void SetInk(Port *p);
OStream& PrintOn(OStream&);
IStream& ReadFrom(IStream&);
Object *ReadAndMap(IStream&);
};
//---- InkManager --------------------------------------------------------------
class InkManager : public Object {
public:
MetaDef(InkManager);
InkManager();
virtual ~InkManager();
friend RGBColor *new_RGBColor(short r, short g, short b, short prec= 0);
friend RGBColor *new_Grey(float graylevel, short prec= 0);
bool Init(); // returns TRUE on error
private:
OrdCollection *sharedinks;
};
#endif